// ==============================================================================
//
// Software Development Kit v 3.0
// Shared Helper Utils
//
// Copyright (c) 2008-2009 Gear Pair Games
//
// Copyright and license exceptions noted in source
//
// Description: This type(s) unit,
// ==============================================================================
unit utils;

interface

uses
  types,
  msg,
  os;

// std::offset
function offset( const inPtr : void; const inVal : int ) : void; inline; overload;

// std::exception
procedure exception( const inCond : bool; const text : ansiString ); inline; overload;

// std::strCntLine
function strCntLine( const inText : ansiString ) : enum;  inline; overload;

// std::strTrim
function strTrim( const inText : ansiString ) : ansiString;

// std::strLn
function strLn( const inVal : ansiString ) : uint; inline; overload;

// std::strCmp
function strCmp( const inStr1, inStr2 : ansiString; const inCheckCase : bool ) : bool; { inline; } overload;

// std::strInt
function strInt( inText : ansiString; const defvalue : int = nullInt ) : int; inline; overload;

// std::strFloat
function strFloat( inText : ansiString; const defvalue : float = nullFloat ) : float; inline; overload;

// std::intStr
function intStr( inVal : int ) : ansiString; inline; overload;

// std::strSetlowcase
procedure strSetlowcase( const inText : pchar );

// std::boolFalse
procedure boolFalse( var b : bool ); inline;
// std::boolTrue
procedure boolTrue( var b : bool ); inline;

implementation

// std::strCntLine
function strCntLine( const inText : ansiString ) : enum;
var
  i : int;
begin
  result := nullInt;
  for i := 1 to strLn( inText ) - 1 do
    if inText[ i ] = #13 then
     inc( result );
end;

// std::strTrim
function strTrim( const inText : ansiString ) : ansiString;
var
  i, l : int;
begin
  l := strLn( inText );
  i := 1;
  while ( i <= l ) and ( inText[ i ] <= ' ' ) do
    inc( i );
  if i > l then
    result := ''
  else
  begin
    while inText[ l ] <= ' ' do
     dec( l );
    result := copy( inText, i, l - i + 1 );
  end;
end;

// std::lnTxt
function strLn( const inVal : ansiString ) : uint;
begin
  result := ( Length( inVal ) );
end;

// std::strCmp
function strCmp( const inStr1, inStr2 : ansiString; const inCheckCase : bool ) : bool;
begin
  result := ( ( inStr1 = inStr2 ) );
end;

// std::offset
function offset( const inPtr : void; const inVal : int ) : void;
begin
  result := ( void( int( inPtr ) + inVal ) );
end;

// std::exception
procedure exception( const inCond : bool; const text : ansiString );
begin
  if inCond = false then
  begin
    osDlgShow( text, msgErrCritiacal );
    Halt( 0 );
  end;
end;

// std::strInt
function strInt( inText : ansiString; const defvalue : int = nullInt ) : int;
var
  code : int; // mask
begin
  Val( string( inText ), result, code );
  if code <> 0 then
    result := defvalue;
end;

// std::strFloat
function strFloat( inText : ansiString; const defvalue : float = nullFloat ) : float;
var
  code : int; // mask
begin
  Val( string( inText ), result, code );
  if code <> 0 then
    result := defvalue;
end;

// std::intStr
function intStr( inVal : int ) : ansiString;
begin
  str( inVal, result );
end;

// std::strSetlowcase
procedure strSetlowcase( const inText : pchar );
begin
  osStrLowcase( inText, strLn( inText ) );
end;

// std::boolFalse
procedure boolFalse( var b : bool );
begin
  b := false;
end;

// std::boolTrue
procedure boolTrue( var b : bool );
begin
  b := True;
end;

end.
